package com.j2eefast.produce.pms.controller;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.j2eefast.common.core.business.annotaion.BussinessLog;
import com.j2eefast.common.core.controller.BaseController;
import com.j2eefast.common.core.enums.BusinessType;
import com.j2eefast.common.core.utils.PageUtil;
import com.j2eefast.common.core.utils.ResponseData;
import com.j2eefast.common.core.utils.ToolUtil;
import com.j2eefast.common.core.utils.ValidatorUtil;
import com.j2eefast.framework.annotation.RepeatSubmit;
import com.j2eefast.framework.sys.service.SysUserService;
import com.j2eefast.framework.utils.Constant;
import com.j2eefast.framework.utils.Global;
import com.j2eefast.framework.utils.UserUtils;
import com.j2eefast.produce.pms.entity.*;
import com.j2eefast.produce.pms.service.PmsProjectService;
import com.j2eefast.produce.pms.service.PmsTestProjectClassifyService;
import com.j2eefast.produce.pms.service.PmsTestProjectService;
import com.j2eefast.produce.pms.service.PmsTestService;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>检测项目分类列表</p>
 *
 * @author: summer
 * @date: 2021-05-29 22:03
 * @web: http://www.letukeji.cn
 * @version: 1.0.1
 */
@Controller
@RequestMapping("/pms/testProject")
public class PmsTestProjectController extends BaseController {
	private String urlPrefix = "modules/pms/testProject";
	@Autowired
	private PmsTestProjectService pmsTestProjectService;
	@Autowired
	private SysUserService sysUserService;

	@Autowired
	private PmsTestProjectClassifyService pmsTestProjectClassifyService;

	@Autowired
	private PmsTestService pmsTestService;

	@RequiresPermissions("pms:testProject:view")
	@GetMapping()
	public String process() {
		return urlPrefix + "/index";
	}

	@RequestMapping("/list")
	@RequiresPermissions("pms:testProject:list")
	@ResponseBody
	public ResponseData list(@RequestParam Map<String, Object> params) {
		PageUtil page = pmsTestProjectService.findPage(params);
		return success(page);
	}

	/**
	 * 删除
	 */
	@BussinessLog(title = "删除", businessType = BusinessType.DELETE)
	@RequestMapping( value = "/del", method = RequestMethod.POST)
	@RequiresPermissions("pms:testProject:del")
	@RequiresRoles(Constant.SU_ADMIN)
	@ResponseBody
	public ResponseData delete(Long[] ids) {
		return pmsTestProjectService.deleteByIds(ids)?success(): error("删除失败!");
	}


	/**
	 * 修改出入库 页面
	 */
	@RequiresPermissions("pms:testProject:edit")
	@GetMapping("/edit/{id}")
	public String edit(@PathVariable("id") String id, ModelMap mmap) {
		PmsTestProjectEntity pmsTestProjectEntity = pmsTestProjectService.getById(id);
		mmap.put("testProject", pmsTestProjectEntity);
		return urlPrefix + "/edit";
	}

	/**
	 * 修改出入库保存
	 */
	@RepeatSubmit
	@RequiresPermissions("pms:testProject:edit")
	@BussinessLog(title = "修改", businessType = BusinessType.UPDATE)
	@RequestMapping(value = "/edit", method = RequestMethod.POST)
	@ResponseBody
	public ResponseData edit(PmsTestProjectEntity pmsTestProjectEntity) {
		ValidatorUtil.validateEntity(pmsTestProjectEntity);
		return pmsTestProjectService.updateById(pmsTestProjectEntity) ? success() : error("修改失败!");
	}

//	/**
//	 * 新增参数配置
//	 */
//	@RequiresPermissions("pms:testProject:add")
//	@GetMapping("/add")
//	public String add() {
//		return urlPrefix + "/add";
//	}

//	/**
//	 * 新增设备
//	 */
	@GetMapping("/add/{id}")
	public String add(@PathVariable("id") Long id, ModelMap mmap){
		//mmap.put("comp",  busClassifyService.findCompById(id));

		PmsTestEntity pmsTestEntity = pmsTestService.findCompById(id);
		mmap.put("classify",  pmsTestEntity);
		return urlPrefix + "/add";
	}

	/**
	 * 新增保存
	 */
	@RepeatSubmit
	@RequiresPermissions("pms:testProject:add")
	@BussinessLog(title = "新增", businessType = BusinessType.INSERT)
	@RequestMapping(value = "/add", method = RequestMethod.POST)
	@ResponseBody
	public ResponseData addSave(@Validated PmsTestProjectEntity pmsTestProjectEntity) {
		//校验参数
		ValidatorUtil.validateEntity(pmsTestProjectEntity);
//		Long userId= UserUtils.getUserInfo().getId();
//		String  createBy= UserUtils.getUserInfo().getName();
//		//SysUserEntity sysUserEntity=pmsProjectService.getSysById(userId);
////		pmsProjectEntity.setRegisterName(sysUserEntity.getName());
//		Date data=new Date();
//		pmsTestProjectEntity.setCreateBy(createBy);
//		pmsTestProjectEntity.setCreateTime(data);
		return pmsTestProjectService.saves(pmsTestProjectEntity) ? success() : error("新增失败!");
	}

	/**
	 * 修改出入库保存
	 */

	@RequiresPermissions("pms:testProject:checkout")
	@BussinessLog(title = "出库", businessType = BusinessType.INSERT)
	@RequestMapping(value = "/checkout", method = RequestMethod.POST)
	@ResponseBody
//	@GetMapping("/checkout/{id}")
	public ResponseData checkout(String id, ModelMap mmap) {

		ValidatorUtil.validateEntity(id);
		Long ids=Long.parseLong(id);
		return pmsTestProjectService.updateCheck(ids) ? success() : error("修改失败!");
	}


	@BussinessLog(title = "检测项目", businessType = BusinessType.EXPORT)
	@RequiresPermissions("pms:output:export")
	@PostMapping("/export")
	@ResponseBody
	public ResponseData export(@RequestParam Map<String, Object> params) throws Exception {
		String fileName = "检测项目";
		fileName = ToolUtil.encodingExcelFilename(fileName);
		String folder = Global.getTempPath() + File.separator + "pio" + File.separator;
		List<PmsTestProjectEntity> listData = pmsTestProjectService.findList(params);
//内容样式策略
		WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
//垂直居中,水平居中
		contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
		contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
		contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
		contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
		contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
//设置 自动换行
		contentWriteCellStyle.setWrapped(true);
// 字体策略
		WriteFont contentWriteFont = new WriteFont();
// 字体大小
		contentWriteFont.setFontHeightInPoints((short) 12);
		contentWriteCellStyle.setWriteFont(contentWriteFont);
//头策略使用默认
		//excel如需下载到本地,只需要将response.getOutputStream()换成File即可(注释掉以上response代码)
		EasyExcel.write(folder + fileName, PmsTestProjectEntity.class)
				//设置输出excel版本,不设置默认为xlsx
				.excelType(ExcelTypeEnum.XLS).head(PmsTestProjectEntity.class)
				//设置拦截器或自定义样式
//				.registerWriteHandler(new MonthSheetWriteHandler())
//				.registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle))
				.sheet("检测项目")
				//设置默认样式及写入头信息开始的行数
				.useDefaultStyle(true).relativeHeadRowIndex(3)
				//这里的addsumColomn方法是个添加合计的方法,可删除
				.doWrite(listData);
		return success(fileName);
	}




}
